// 导入axios
import axios from 'axios'
// 导入vuex
import store from '@/store'
// 导入路由
import router from '@/router'
// 导入message组件
import { Message } from 'element-ui'
// 创建axios副本
const _axios = axios.create({
  baseURL: process.env.VUE_APP_BASE_API
})
// 请求拦截
_axios.interceptors.request.use(
  (config) => {
    // 请求拦截中统一加入token请求头
    // 判断token是否存在,存在才加入请求头
    if (store.state.user.token) {
      config.headers.Authorization = `Bearer ${store.state.user.token}`
    }
    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)
// 响应拦截
_axios.interceptors.response.use(
  (res) => {
    // 统一错误处理
    if (res.data.success) {
      // success值为true
      return res.data
    } else {
      // success值为false,说明请求不成功
      // 所以需要提示错误信息
      Message.error(res.data.message)
      // 并且中止后面代码运行,让后面api调用执行.catch
      return Promise.reject(res.data.message)
    }
  },
  (error) => {
    // 判断错误信息如果为401,那就是token失效,需要清除token,并返回登录页
    if (error.response && error.response.status === 401) {
      store.commit('user/layout')
      // 返回登陆页时将回跳页面传入过去
      router.push('/login?redirect=' + location.href.split('#')[1])
    }
    return Promise.reject(error)
  }
)
// 暴露
export default _axios
